﻿/*
 * sysdaemon.hpp
 *
 *  Created on: 2018年2月14日
 *      Author: work
 */

#ifndef DM_TOOLS_DMD_INC_SYSDAEMON_HPP_
#define DM_TOOLS_DMD_INC_SYSDAEMON_HPP_

#include <boost/process.hpp>
#include <dm/os/sys/sysinfo.hpp>
#include <dm/scada/deviceagent.hpp>

/**
 * 平台守护类
 */
class CSysDaemon:public dm::os::sys::CSysInfo{
public:
	/**
	 * 设备状态编码
	 */
	enum EStatus{
		Status_Online,//!< 是否在线
		Status_Max    //!< Status_Max
	};
	/**
	 * 设备离散量编码
	 */
	enum EDiscrete{
		Discrete_State,	// 设备状态
		Discrete_Max//!< Discrete_Max
	};

	/**
	 * 设备累计量编码
	 */
	enum ECumulant{
		Cumulant_RxCnt,  //!< 接收流量计数
		Cumulant_TxCnt,  //!< 发送流量计数
		Cumulant_StartRx,//!< 开始接收时刻
		Cumulant_StartTx,//!< 开始发送时刻
		Cumulant_LastRx, //!< 最后接收时刻
		Cumulant_LastTx, //!< 最后发送时刻
		Cumulant_Max
	};

	CSysDaemon( const bool& console=false,const bool& nd=false );
	~CSysDaemon();

	inline void setExecInterval( long interval ){
		m_execInterval = interval;
	}

	bool setSysDevice( const char* devName );
	
	bool runOnce();

protected:
	bool exec( dm::os::sys::STaskInfo& task );

protected:
	long m_execInterval;	// 启动间隔 毫秒
	bool m_me;
	bool m_console;
	bool m_nd;	// 非后台

	dm::scada::CDeviceAgent* m_dev;	//!< 设备代理器

	boost::process::group m_children;	// 子进程
};

#endif /* DM_TOOLS_DMD_INC_SYSDAEMON_HPP_ */
